home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 2010 April / PCWorld0410.iso / pluginy Firefox / 5817 / 5817.xpi / components / clh.js
Text File  |  2010-02-11  |  5KB  |  175 lines

  1. //https://developer.mozilla.org/en/Chrome/Command_Line
  2.  
  3. const nsISupports           = Components.interfaces.nsISupports;
  4. const nsICategoryManager    = Components.interfaces.nsICategoryManager;
  5. const nsIComponentRegistrar = Components.interfaces.nsIComponentRegistrar;
  6. const nsICommandLine        = Components.interfaces.nsICommandLine;
  7. const nsICommandLineHandler = Components.interfaces.nsICommandLineHandler;
  8. const nsIFactory            = Components.interfaces.nsIFactory;
  9. const nsIModule             = Components.interfaces.nsIModule;
  10. const nsIWindowWatcher      = Components.interfaces.nsIWindowWatcher;
  11.  
  12. const CHROME_URI = "chrome://sqlitemanager/content/";
  13. const clh_contractID = "@mrinalkant/commandlinehandler/general-startup;1?type=sqlitemanager";
  14.  
  15. // use uuidgen to generate a unique ID
  16. const clh_CID = Components.ID("{f15ff0f9-9699-496e-a13c-a651365abe2a}");
  17.  
  18. // category names are sorted alphabetically. Typical command-line handlers use a
  19. // category that begins with the letter "m".
  20. const clh_category = "m-sqlitemanager";
  21.  
  22. /**
  23.  * Utility functions
  24.  */
  25.  
  26. /**
  27.  * Opens a chrome window.
  28.  * @param aChromeURISpec a string specifying the URI of the window to open.
  29.  * @param aArgument an argument to pass to the window (may be null)
  30.  */
  31. function openWindow(aChromeURISpec, aArgument)
  32. {
  33.   var ww = Components.classes["@mozilla.org/embedcomp/window-watcher;1"].
  34.     getService(Components.interfaces.nsIWindowWatcher);
  35.   ww.openWindow(null, aChromeURISpec, "_blank",
  36.                 "chrome,menubar,toolbar,status,resizable,dialog=no",
  37.                 aArgument);
  38. }
  39.  
  40. /**
  41.  * The XPCOM component that implements nsICommandLineHandler.
  42.  * It also implements nsIFactory to serve as its own singleton factory.
  43.  */
  44. const myAppHandler = {
  45.   /* nsISupports */
  46.   QueryInterface : function clh_QI(iid)
  47.   {
  48.     if (iid.equals(nsICommandLineHandler) ||
  49.         iid.equals(nsIFactory) ||
  50.         iid.equals(nsISupports))
  51.       return this;
  52.  
  53.     throw Components.results.NS_ERROR_NO_INTERFACE;
  54.   },
  55.  
  56.   /* nsICommandLineHandler */
  57.  
  58.   handle : function clh_handle(cmdLine)
  59.   {
  60.     var args = Components.classes["@mozilla.org/supports-string;1"]
  61.                          .createInstance(Components.interfaces.nsISupportsString);
  62.     try {
  63.       // command line flag that takes an argument
  64.       var uristr = cmdLine.handleFlagWithParam("sqlitemanager", false);
  65.       if (uristr != null) {
  66.         // convert uristr to an nsIURI
  67.         args.data = cmdLine.resolveURI(uristr).path;
  68.         openWindow(CHROME_URI, args);
  69.         cmdLine.preventDefault = true;
  70.       }
  71.     }
  72.     catch (e) {
  73.       Components.utils.reportError("incorrect parameter passed to -sqlitemanager on the command line." + e.name + uristr);
  74.       openWindow(CHROME_URI, null);
  75.       cmdLine.preventDefault = true;
  76.     }
  77.  
  78.     // command line flag (no argument)
  79.     if (cmdLine.handleFlag("anotherflag", false)) {
  80.       //TODO: whatever you want
  81.       cmdLine.preventDefault = true;
  82.     }
  83.   },
  84.  
  85.   // CHANGEME: change the help info as appropriate, but
  86.   // follow the guidelines in nsICommandLineHandler.idl
  87.   // specifically, flag descriptions should start at
  88.   // character 24, and lines should be wrapped at
  89.   // 72 characters with embedded newlines,
  90.   // and finally, the string should end with a newline
  91.   helpInfo : "  -sqlitemanager       Open SQLite Manager\n" +
  92.              "  -sqlitemanager <uri> Open the URI in SQLite Manager\n",
  93.  
  94.   /* nsIFactory */
  95.  
  96.   createInstance : function clh_CI(outer, iid)
  97.   {
  98.     if (outer != null)
  99.       throw Components.results.NS_ERROR_NO_AGGREGATION;
  100.  
  101.     return this.QueryInterface(iid);
  102.   },
  103.  
  104.   lockFactory : function clh_lock(lock)
  105.   {
  106.     /* no-op */
  107.   }
  108. };
  109.  
  110. /**
  111.  * The XPCOM glue that implements nsIModule
  112.  */
  113. const myAppHandlerModule = {
  114.   /* nsISupports */
  115.   QueryInterface : function mod_QI(iid)
  116.   {
  117.     if (iid.equals(nsIModule) ||
  118.         iid.equals(nsISupports))
  119.       return this;
  120.  
  121.     throw Components.results.NS_ERROR_NO_INTERFACE;
  122.   },
  123.  
  124.   /* nsIModule */
  125.   getClassObject : function mod_gch(compMgr, cid, iid)
  126.   {
  127.     if (cid.equals(clh_CID))
  128.       return myAppHandler.QueryInterface(iid);
  129.  
  130.     throw Components.results.NS_ERROR_NOT_REGISTERED;
  131.   },
  132.  
  133.   registerSelf : function mod_regself(compMgr, fileSpec, location, type)
  134.   {
  135.     compMgr.QueryInterface(nsIComponentRegistrar);
  136.  
  137.     compMgr.registerFactoryLocation(clh_CID,
  138.                                     "myAppHandler",
  139.                                     clh_contractID,
  140.                                     fileSpec,
  141.                                     location,
  142.                                     type);
  143.  
  144.     var catMan = Components.classes["@mozilla.org/categorymanager;1"].
  145.       getService(nsICategoryManager);
  146.     catMan.addCategoryEntry("command-line-handler",
  147.                             clh_category,
  148.                             clh_contractID, true, true);
  149.   },
  150.  
  151.   unregisterSelf : function mod_unreg(compMgr, location, type)
  152.   {
  153.     compMgr.QueryInterface(nsIComponentRegistrar);
  154.     compMgr.unregisterFactoryLocation(clh_CID, location);
  155.  
  156.     var catMan = Components.classes["@mozilla.org/categorymanager;1"].
  157.       getService(nsICategoryManager);
  158.     catMan.deleteCategoryEntry("command-line-handler", clh_category);
  159.   },
  160.  
  161.   canUnload : function (compMgr)
  162.   {
  163.     return true;
  164.   }
  165. };
  166.  
  167. /* The NSGetModule function is the magic entry point that XPCOM uses to find what XPCOM objects
  168.  * this component provides
  169.  */
  170. function NSGetModule(comMgr, fileSpec)
  171. {
  172.   return myAppHandlerModule;
  173. }
  174.  
  175.